package com.leiqichao.backend.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;

/**
 * MyMetaObjectHandler 类
 * 作用：实现 MyBatis-Plus 的自动填充功能，用于在插入和更新数据时自动填充字段值。
 * 例如：在插入数据时自动填充 created_at 和 updated_at 字段，在更新数据时自动填充 updated_at 字段。
 */
@Component // 将该类声明为 Spring 的组件，使其可以被 Spring 容器管理
public class MyMetaObjectHandler implements MetaObjectHandler {

    /**
     * insertFill 方法
     * 作用：在插入数据时自动填充字段值。
     * 参数：
     *   - metaObject：MyBatis-Plus 提供的元数据对象，用于操作实体类的字段。
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        // 在插入数据时，自动填充 created_at 字段，值为当前时间
        this.strictInsertFill(metaObject, "createdAt", LocalDateTime.class, LocalDateTime.now());

        // 在插入数据时，自动填充 updated_at 字段，值为当前时间
        this.strictInsertFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now());

        this.strictInsertFill(metaObject, "publishedAt", LocalDateTime.class, LocalDateTime.now());

        this.strictInsertFill(metaObject, "timestamp", LocalDateTime.class, LocalDateTime.now());
    }

    /**
     * updateFill 方法
     * 作用：在更新数据时自动填充字段值。
     * 参数：
     *   - metaObject：MyBatis-Plus 提供的元数据对象，用于操作实体类的字段。
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // 在更新数据时，自动填充 updated_at 字段，值为当前时间
        this.strictUpdateFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now());
    }
}